package DAO;
import Pojo.Fornecedor;
import Pojo.Item;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.logging.Level;
import java.util.logging.Logger;


/**Classe que serve para manipulacao da Lista de Itens
 * 
 * @author Vitor
 */
public class ItemDAO {
    
    private ArrayList<Item> listaItens = new ArrayList<Item>();
    
    /**Metodo que adiciona que um item cadastrado a lista de itens
     * e faz a sua ordenação pelo atributo nome do item
     * @param item - Um item qualquer
     */
    public void adicionarItem(Item item){
        this.listaItens.add(item);
        Collections.sort(listaItens);
    }
    
    /**Metodo que remove um item da lista de itens cadastrados
     * @param nome - nome de um item
     * @return boolean - true caso exclua o item
     * false caso contrario
     */
    public boolean excluirItem(String nome){
        Item aux = new Item();
        aux.setNome(nome);
        return this.listaItens.remove(aux);
    }
    
    /**Metodo que busca na lista de itens um item pelo seu nome
     * @param nome - nome de um item que vai ser buscado
     * @return Item - item buscado
     */
    public Item buscaItemNome(String nome){
        for(Item item: this.listaItens){
            if(item.getNome().equals(nome)){
                return item;
            }
        }
        return null;
    }
    
    /**Metodo que busca um item na lista de itens pelo seu codigo
     * @param codigo - codigo do item buscado
     * @return Item - Item buscado
     */
    public Item buscaItemCodigo(int codigo){
        for(Item item: this.listaItens){
            if(item.getCodigo() == codigo){
                return item;
            }
        }
        return null;
    }
    
    /**Metodo que le de um arquivo .txt uma lista de itens cadastrados e adiciona eles na lista de itens
     * pelos atributos
     * nome 
     * codigo
     * margem de lucro
     * preco de custo
     * quantidade
     * @param fornecedorDao - Função que auxilia na busca de um fornecedor.
     */
    public void lerArquivo(FornecedorDAO fornecedorDao){
        
        FileReader fileR;
        BufferedReader buff;
        try {        
            fileR = new FileReader("Itens.txt");
            buff = new BufferedReader(fileR);
            while(buff.ready()){
                Item item = new Item();
                item.setNome(buff.readLine());
                item.setCodigo(Integer.parseInt(buff.readLine()));
                item.setMargemDeLucro(Float.parseFloat(buff.readLine()));
                item.setPrecoDeCusto(Float.parseFloat(buff.readLine()));
                item.setQuantidade(Integer.parseInt(buff.readLine()));
                String[] s1 = buff.readLine().split(" ");
                for(String s: s1){
                    Fornecedor aux = fornecedorDao.buscaFornecedorNome(s) ;
                    if(aux!=null){
                        item.AddFonecedores(aux);
                    }
                }    
                this.listaItens.add(item);
                
            }
            
            buff.close();
            fileR.close();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(ItemDAO.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(ItemDAO.class.getName()).log(Level.SEVERE, null, ex);
        }            
    }
    
    /**
     * Metodo que escreve em um arquivo .txt o itens da lista de itens pelos seus atributos
     * nome 
     * codigo
     * margem de lucro
     * preco de custo
     * quantidade
     */
    public void escreverArquivo(){
       
        try {
        
            FileWriter fw = new FileWriter("Itens.txt",false);
            PrintWriter saida = new PrintWriter(fw,true);
            for(Item item : this.listaItens){
                saida.println(item.getNome());
                saida.println(item.getCodigo());
                saida.println(item.getMargemDeLucro());
                saida.println(item.getPrecoDeCusto());
                saida.println(item.getQuantidade());
                for(Fornecedor fornecedor: item.getFonecedores()){
                    saida.print(fornecedor.getNome()+" ");
                }
                saida.println();
            }                       
            saida.close();
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    /**
     *Metodo que retorna o lista de itens cadastrados
     * @return ArrayList - lista de itens cadastrados 
     */
    public ArrayList<Item> getListaItens() {
        return listaItens;
    }   
}